package chapter4.lessons;

/**
 * @Project ：learn_java
 * @File ：SellTicketDemoSolve02.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/3/5 21:36
 * @Description ：资源竞争的sync解决方案且只使用this
 */

public class SellTicketDemoSolve03 implements Runnable {

    private int tickets = 10000;

    @Override
    public void run() {
        // 多个线程必须使用一把锁
        synchronized (this) {
            while (true) {
                if (tickets <= 0) break;
                // 先进行减票操作，再输出，因为输出信息是知道还剩多少张票，而不是当前是第几张票被卖出
                tickets--;
                System.out.println(Thread.currentThread().getName()
                        + " 在卖票，余 " + tickets + " 票");
            }
        }
    }
}
